#ifndef SYS_STATE_
#define SYS_STATE_

#include <iostream>
#include <vector>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <cstring>

struct SysState {
  int n;
  int** B;
  double** L;
  double* Ts;
  double** Tn;
  double default_lambda;


  //cumulative time, current max time, number of done jobs for each queue 
  double** q_cum;
  double** q_max;
  int** q_count;

  //total max time and cumulative time
  double max_time;
  double cum_time;
  int total_done_job;

  //record for each execution
  int exe_round;
  double* pwt_queue;
  double* maxpwt_queue;

  //first argument is the number of files
  //second argument is the number of valid join job queue Qij (1<=i<j<=n) in our system(we assume this number will not be too large)
  SysState(int num_file, int num_join_job, double lambda, int exe_round = 1);
  void reset(int num_file, int num_join_job);

  ~SysState();
};

#endif  // SYS_STATE_
